/*
    作者：zx
    时间：2.23.2.3
    描述：文件定义，万物皆文件
*/

#ifndef FILE_H
#define FILE_H

#include "comm/types.h"

#define FILE_TABLE_SIZE 2048
#define FILE_NAME_SIZE 32

struct _fs_t;


typedef enum _file_type_t
{
    FILE_UNKNOWN = 0,
    FILE_TTY,
    FILE_DIR,
    FILE_NORMAL
}file_type_t;

typedef struct _file_t
{
    char name[FILE_NAME_SIZE];
    // 所属哪个文件系统
    struct _fs_t * fs;
    file_type_t type;
    uint32_t size;
    // 引用次数/打开次数
    int ref;
    // 设备id/对应dev中的major
    int dev_id;
    // 当前文件指针
    int pos;
    // 文件读写模式
    int mode; 
    // 文件在目录区的索引
    int file_item_index;
    int start_clus;   // 文件数据存储开始的簇号
    int curr_clus;    // 当前正在读取的簇号
}file_t;

file_t * file_alloc(void);
void file_free(file_t * file);
void file_tabel_init(void);
// 指定file 增加引用
void file_inc_ref(file_t * file);
#endif // !FILE_H